package cn.bonoon.kernel.util;

public enum Opt {

	/**
	 * <pre>
	 * 没有定义,默认情况:
	 * 1.字符串使用'like'
	 * 2.其它情况使用'='
	 * </pre>
	 */
	NONE("=", "=?", 1, "默认(等于)"),
	
	/** 等于 */
	EQ("=", "=?", 1, "等于"),
	
	/** 不等于 */
	NE("<>", "<>?", 1, "不等于"),
	/**
	 * 大于
	 */
	GT(">", ">?", 1, "大于"),
	/**
	 * 大于等于
	 */
	GE(">=", ">=?", 1, "大于等于"),
	/**
	 * 小于
	 */
	LT("<", "<?", 1, "小于"),
	/**
	 * 小于等于
	 */
	LE("<=", "<=?", 1, "小于等于"),
	/**
	 * like
	 */
	LIKE(" like ", " like ?", 1, "包含字符串"),
	/**
	 * left like
	 */
	LL(" like ", " like ?", 1, "以字符串开头"),
	/**
	 * right like
	 */
	RL(" like ", " like ?", 1, "以字符串结束"),
	/**
	 * 字段为空
	 */
	NULL(" is null", " is null", 0, "值为空"),
	
	/** 字段值不为空 */
	NN(" is not null", " is not null", 0, "值不为空"),
//	/**
//	 * 数组为空
//	 */
//	EMPTY(" is empty", " is empty", 0, "列表为空"),
	/**
	 * in查询
	 */
	IN(" in", " in(?)", Integer.MAX_VALUE, "包含值"),
	/**
	 * not in查询
	 */
	NI(" not in", " not in(?)", Integer.MAX_VALUE, "不包含值");

	/**
	 * 直接生成的数据库操作符
	 */
	private final String operator;
	
	/**
	 * 无参数的操作符
	 */
	private final String simpleOperator;
	/**
	 * 操作符的名称
	 */
	private final String name;
	/**
	 * 该操作可接受的参数的数量，如：等于操作只接受1个参数，是否为空的操作不接受任何参数，包含操作(in)接受任何多个参数
	 * 0表示不需要参数
	 * int.max表示可以有任何多的参数
	 */
	private final int valueCount;
	
	private Opt(String simpleOperator, String operator, int valueCount, String name) {
		this.simpleOperator = simpleOperator;
		this.operator = operator;
		this.valueCount = valueCount;
		this.name = name;
	}

	/**
	 * 操作符，带着参数的
	 * @return
	 */
	public String getOperator() {
		return this.operator;
	}
	
	/**
	 * 操作符，不带参数
	 * @return
	 */
	public String getSimpleOperator() {
		return simpleOperator;
	}
	
	/**
	 * 中文名称
	 * @return
	 */
	public String getName() {
		return name;
	}

	public int getValueCount() {
		return valueCount;
	}
}
